/**
 * NeuroSky蓝牙脑波数据使用示例
 * 
 * 用途：展示如何使用NeuroSkyService进行蓝牙脑波数据采集和发送
 * 方法：提供完整的使用流程示例代码
 * 原理：演示服务配置、连接建立、数据处理和错误处理的完整流程
 */
package com.example.brain_wave.bluetooth.example

import android.content.Context
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.example.brain_wave.bluetooth.NeuroSkyService
import com.example.brain_wave.config.AppConfig
import kotlinx.coroutines.launch

/**
 * NeuroSky使用示例ViewModel
 */
class NeuroSkyUsageExample(private val context: Context) : ViewModel() {
    
    private val neuroSkyService = NeuroSkyService(context)
    private val appConfig = AppConfig.getInstance(context)
    
    /**
     * 初始化和配置服务
     */
    fun initializeService() {
        // 配置服务参数
        neuroSkyService.configure(
            roomId = "room_001",
            apiBaseUrl = appConfig.apiBaseUrl, // 从配置文件读取API服务器地址
            apiEndpoint = appConfig.apiEndpoint // 从配置文件读取API端点
        )
        
        // 设置连接状态回调
        neuroSkyService.setOnConnectionStateChanged { isConnected ->
            if (isConnected) {
                println("NeuroSky设备连接成功")
            } else {
                println("NeuroSky设备连接断开")
            }
        }
        
        // 设置数据发送成功回调
        neuroSkyService.setOnDataSent { response ->
            println("数据发送成功: $response")
        }
        
        // 设置错误回调
        neuroSkyService.setOnError { error ->
            println("发生错误: $error")
        }
    }
    
    /**
     * 连接到NeuroSky设备
     */
    fun connectToDevice() {
        viewModelScope.launch {
            // 检查蓝牙是否可用
            if (!neuroSkyService.isBluetoothAvailable()) {
                println("蓝牙不可用，请检查蓝牙设置")
                return@launch
            }
            
            // 获取已配对的设备
            val pairedDevices = neuroSkyService.getPairedDevices()
            if (pairedDevices.isNullOrEmpty()) {
                println("没有找到已配对的设备")
                return@launch
            }
            
            // 查找NeuroSky设备（通常名称包含"NeuroSky"或"MindWave"）
            val neuroSkyDevice = pairedDevices.find { device ->
                device.name?.contains("NeuroSky", ignoreCase = true) == true ||
                device.name?.contains("MindWave", ignoreCase = true) == true
            }
            
            if (neuroSkyDevice == null) {
                println("没有找到NeuroSky设备")
                return@launch
            }
            
            println("尝试连接到设备: ${neuroSkyDevice.name} (${neuroSkyDevice.address})")
            
            // 连接到设备
            val success = neuroSkyService.startService(neuroSkyDevice.address)
            if (success) {
                println("开始连接NeuroSky设备...")
            } else {
                println("连接失败")
            }
        }
    }
    
    /**
     * 测试API连接
     */
    fun testApiConnection() {
        viewModelScope.launch {
            val isConnected = neuroSkyService.testApiConnection()
            if (isConnected) {
                println("API服务器连接正常")
            } else {
                println("API服务器连接失败，请检查网络和服务器地址")
            }
        }
    }
    
    /**
     * 断开连接
     */
    fun disconnect() {
        neuroSkyService.stopService()
        println("服务已停止")
    }
    
    /**
     * 获取服务状态信息
     */
    fun getServiceStatus() {
        println("服务运行状态: ${neuroSkyService.isServiceRunning()}")
        println("蓝牙连接状态: ${neuroSkyService.isConnected()}")
        println("数据缓存大小: ${neuroSkyService.getDataBufferSize()}")
    }
    
    /**
     * 完整的使用流程示例
     */
    fun fullUsageExample() {
        // 1. 初始化服务
        initializeService()
        
        // 2. 测试API连接
        testApiConnection()
        
        // 3. 连接设备
        connectToDevice()
        
        // 4. 监控状态（可以定期调用）
        // getServiceStatus()
        
        // 5. 在适当的时候断开连接
        // disconnect()
    }
    
    override fun onCleared() {
        super.onCleared()
        // 清理资源
        neuroSkyService.stopService()
    }
}

/**
 * 在Activity或Fragment中的使用示例
 */
/*
class MainActivity : ComponentActivity() {
    private lateinit var neuroSkyExample: NeuroSkyUsageExample
    
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        
        // 初始化示例
        neuroSkyExample = NeuroSkyUsageExample(this)
        
        // 开始完整的使用流程
        neuroSkyExample.fullUsageExample()
    }
    
    override fun onDestroy() {
        super.onDestroy()
        // 断开连接
        neuroSkyExample.disconnect()
    }
}
*/